package com.zsqat.eshop.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zsqat.common.utils.PageUtils;
import com.zsqat.eshop.product.entity.CategoryEntity;
import com.zsqat.eshop.product.vo.Category2Vo;

import java.util.List;
import java.util.Map;

/**
 * 商品三级分类
 *
 * @author zsqat
 * @email 491192853@qq.com
 * @date 2020-11-19 16:40:59
 */
public interface CategoryService extends IService<CategoryEntity> {
    // 获取目录树
    List<CategoryEntity> getTreeList();

    // 根据三级目录categoryId获取完整三级分类
    Long[] findCategoryPath(Long categoryId);

    // 修改三级分类时，要携带修改和分类关联的表中分类名称
    void updateDetail(CategoryEntity category);

    // 获取所有的一级分类
    List<CategoryEntity> getLevel1Category();

    // 根据一级分类找到一级分类对应的所有二级，三级分类
    Map<String, List<Category2Vo>> getCategoryJson0();
    Map<String, List<Category2Vo>> getCategoryJson();
    /*// 直接从数据库查询，无锁，无缓存
    Map<String, List<Category2Vo>> getCategoryFromDb();
    // 直接查询数据库并放入缓存，但没带锁
    Map<String, List<Category2Vo>> getCategoryJsonNoLock();
    // 数据库查询并封装数据，使用本地锁
    Map<String, List<Category2Vo>> getCategoryJsonFromDbWithLocalLock();
    // 从数据库查询并封装数据:分布式锁
    Map<String, List<Category2Vo>> getCategoryJsonFromDbWithRedisLock();
    // 缓存里的数据如何和数据库的数据保持一致
    Map<String, List<Category2Vo>> getCategoryJsonFromDbWithRedissonLock();*/
}

